// import com.alibaba.druid.DbType;
// import com.alibaba.druid.sql.SQLUtils;
// import com.alibaba.druid.sql.ast.SQLExpr*;
// import com.alibaba.druid.sql.ast.SQLName*;
// import com.alibaba.druid.sql.ast.SQLWindow;
// import com.alibaba.druid.sql.ast.statement.SQLSelectItem;
// import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem;
// import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
// import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObject;
// import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor*;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor*;

// import java.util.ArrayList;
// import java.util.std::list;
#pragma once
#include <string>
#include <list>
#include "../../../../ast/Object.h"
#include "../../../../ast/SQLExpr.h"
#include "../../../../ast/SQLName.h"
#include "../../../../ast/statement/SQLSelectQueryBlock.h"
#include "../MySqlObject.h"

class SQLASTVisitor;
class MySqlASTVisitor;

class MySqlSelectQueryBlock : public SQLSelectQueryBlock, public MySqlObject
{
  public:
  BOOL_ptr hignPriority;
  BOOL_ptr straightJoin;
  BOOL_ptr smallResult;
  BOOL_ptr bigResult;
  BOOL_ptr bufferResult;
  BOOL_ptr cache;
  BOOL_ptr calcFoundRows;
  SQLName_ptr procedureName;
  SQLExpr_list_ptr  procedureArgumentList;
  BOOL_ptr lockInShareMode;
  SQLName_ptr forcePartition; // for petadata

  MySqlSelectQueryBlock();
  SHAREDOBJECT(MySqlSelectQueryBlock) ;
  // MySqlSelectQueryBlock *clone();
  virtual SQLObject_ptr clone();
  int getHintsSize();

  BOOL_ptr isLockInShareMode();

  void setLockInShareMode(BOOL_ptr lockInShareMode);

  SQLName_ptr getProcedureName();

  void setProcedureName(SQLName_ptr procedureName);

  SQLExpr_list_ptr  getProcedureArgumentList();

  BOOL_ptr isHignPriority();

  void setHignPriority(BOOL_ptr hignPriority);

  BOOL_ptr isStraightJoin();

  void setStraightJoin(BOOL_ptr straightJoin);

  BOOL_ptr isSmallResult();

  void setSmallResult(BOOL_ptr smallResult);

  BOOL_ptr isBigResult();

  void setBigResult(BOOL_ptr bigResult);

  BOOL_ptr isBufferResult();

  void setBufferResult(BOOL_ptr bufferResult);
  BOOL_ptr getCache();

  void setCache(BOOL_ptr cache);

  BOOL_ptr isCalcFoundRows();

  void setCalcFoundRows(BOOL_ptr calcFoundRows);

  bool equals(Object_ptr o);

  int hashCode();

  void accept0(SQLASTVisitor_ptr visitor);

  void accept0(MySqlASTVisitor_ptr visitor);

  SQLName_ptr getForcePartition();

  void setForcePartition(SQLName_ptr x);

  string_ptr   toString();
};
